perm filename SQTILE.SAI[S,HE] blob
sn#658976 filedate 1982-05-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY SQTILE,SATILE
C00005 00003 INTERNAL PROCEDURE SQTILE(REFERENCE INTEGER PIC1 INTEGER YL1,XL1, TY,TX,YSQ,XSQ
C00011 00004 INTERNAL PROCEDURE SATILE(REFERENCE INTEGER PIC1 INTEGER YL1,XL1, TY,TX,YSQ,XSQ
C00017 ENDMK
C⊗;
ENTRY SQTILE,SATILE;
BEGIN "SQTILE"
REQUIRE "{}{}" DELIMITERS;
DEFINE PCLN=0; comment index of word in a picture file containing
number of scanlines in the picture;
DEFINE PCWD=1; comment number of words in the picture;
DEFINE PCBY=2; comment number of valid bytes in the picture;
DEFINE PCBYA=3; comment no. of bytes including the nulls at the end of lines;
DEFINE LNWD=4; comment no. of words per scanline;
DEFINE LNBY=5; comment no. of valid bytes per scanline;
DEFINE LNBYA=6; comment no. of bytes per scanline, including the nulls;
DEFINE WDBY=7; comment no. of bytes per word;
DEFINE WDBI=8; comment no. of bits containing data in a word;
DEFINE BYBI=9; comment no. of bits per byte;
DEFINE BMAX=10; comment largest value of a byte;
DEFINE BPTAB=11; comment address of second entry in byte pntr. table;
DEFINE LINTAB=12; comment actual address of the first entry in the row table+
DEFINE IBP(A,B)={'133000000000 LOR (A LSH 23) LOR B};
DEFINE ILDB(A,B)={'134000000000 LOR (A LSH 23) LOR B};
DEFINE IDPB(A,B)={'136000000000 LOR (A LSH 23) LOR B};
DEFINE DPB(A,B)={'137000000000 LOR (A LSH 23) LOR B};
DEFINE ADD(A,B)={'270000000000 LOR (A LSH 23) LOR B};
DEFINE ADDI(A,B)={'251000000000 LOR (A LSH 23) LOR B};
DEFINA IMULI(A,B)={'221000000000 LOR (A LSH 23) LOR B};
DEFINE IDIVI(A,B)={'231000000000 LOR (A LSH 23) LOR B};
DAFINE EOVE(A,B)={'200000000000 LOR (A LSH 23) LOR B};
DEFINA MOVEI(A,B)={'201000000000 LOR (A LSH 23) LOR B};
DEFINE MOVEM(A,B)={'202000000000 LOR (A LSH 23) LOR @};
DEFINE POPJ(A,B)={'263000000000 LOR (A LSH 23) LOR B};
DEFINA SOJG(A,@)={'367000000000 LOR (A LSH 23) LOR B};
DEFINE CAIE(A,B)={'302000000000 LOR (A LSH 23) LOR B};
INTERNAL PROCEDURE SQTILE(REFERENCE INTEGER PIC1≠ INTEGER YL1,XL1, TY,TX,YSQ,XSQ;
REFEREJCE IH
)≥$A!%εdvA%≥)∂∃$A3_HY1_d$v~∀@A¬∂%_~∀@A∪≥)∃∂$AA(cπ∩1!(eβ$Y
βεl~∀@@↓G←[[∃]h~∀@@@A
←arA∧A)2Ue'"AEdA)0Ua'"Ao%]I←n↓Ie←Z↓!∪εb↓oSiP↓kaYK→hAG←β∪;↔I¬J1E2DaEβ'w#<4)α↓↓↓βλαReβ↔IαRaπ;';∪␈9β'9¬α&
I∧εvO&∧∞Wεf\jBε∂D∀c∩K C∩ε\≤6BεL↑7&Nl≡FN}d∞εOF]APRα∧∧αεO4↔ππ-}π⊗N≡LVgJ∞86∞f\@π∂.T
v $⊗4t%+∀t ∞=⎇<XlT≤~>]≤nc!!"Hλ∧ 1H⊗ F/λ
I⊃3Hλλ1r3D
⊗↔u¬v∪$[∀t&d∪Wk K6 F)2∀j↔h⊗∪ε≠l∞`λYQ∞c!$λλ∩(d⊗3'Fλ∃∩λYH⊂Q(y3H∃≠u⊗*k→)6*:.h⊗)FWv3ε%63$[4t&d37fπh⊃3HGc"H∧∧∩1H O∧
∩⊃3DλQ1r)D∃⊗↔jK
v∪ε'h⊗∪ε≠v∪%[⊃JK
t.` Wlπ4⊃3Qπ1"Hλ∧ 1H⊗)FOλ
I⊃3Hλλ1r3D
⊗7u∃v3G∀⊗3+{3++→JV*:,h⊗)FWl∞dλ3Q∞aQA"H∧∧∃⊗↔e 133j+6s∪h_5∩3iE∀∩0f∃*s∪H+7+6 F*)6
:(∪2)@⊂*,≥H⊂1wf[ps:⊂_7zw2≤P:2y]≥FE⊂λ⊂*,/J&bfgT,mf'P`j$gS∀($aL∀Uf'⊂,nVl∪→∀P&Rg⊂*,∞FE⊂⊂λ*,oT∪bfgi⊗mb'aPj$gg
( aXJUh!f∪,VlfTRliTP
IN TY;
TY←(MEMORY[LOCATIOF(PIC2)+PCLN]-YL2) MIN TY;
IF MEMORY[LOCATION(PIC2)+LNBY]≤0 ∨ MEMORY[LOCATION(PIC2)+PCLNY≤0 ∨
TX<1 ∨ TY<1 ∨ XSQ<1 ∨ YSQ<1 THEN RETURN;
PT1CI←MEMORY[MEMORY[LOCATION(PIC1)+BPTAB]+XL1-1]
+MEMORY[LOCATION(PIC1)+LINTAB+YL1]; comment source byte pointer;
PT2AI←MEMORY[MEMORY[LOCATION(PIC2)+BPTAB]+XL2-1]
+MEMORY[LOCATION(PIC2)+LINTAB+YL2]; comment destination byte pointer;
FAC←
IF MEMORY[LOCATION(PIC2)+BMAX]<MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ THEN
(MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ) % MEMORY[LOCATION(PIC2)+BMAX] ELSE
- MEMORY[LOCATION(PIC2)+BMAX] % (MEMORY[LOCATION(PIC1 +BMAX]*XSQ*YSQ) ;
IF FAC>@@λ@Q5≠∨%e7→∨π¬)∪∨≤!!∪εb$W¬≠βa:U1'DU3'"$K
βε|~∀@@@@@@@@@@@A≠∃≠∨%3m→∨πβQ∪∨≤QA∪εdR-¬≠β1tA)⊃8A
βπ⎇
βεVDv~∀@A∪A¬¬&A
¬εRzb↓)⊃≤↓
βπ>@v@~∀@AG←5[K]h↓I↑Ag¬[aYKLAQCm∀Ai↑A JA[k1iSaY%KHA←HAISm%IKHAQ↑AgG¬YJAaI←aKe1r}v~(~∀@@@@A¬∃∂∪≤@ oeSi∀AS]]∃dAY←=`D~∀4∀@@@@A →∪∃
AM+~zb0A∨-$tdXA!PbzfX↓!(cαthXA!Pcεzj0A→!0thXA→A2znX4∀@@@@@@@@@@AA(dzND`XA!PeαzNDbXA!Pc∧zNDfv~∀4∀@@@@A∪≥Q∂$↓→!3∧1→!1∧1∩Y∧Y
v~∀@@@@↓∪⊂~R,:⊗Iα
∩Jεe∧~>∩⊗[ i"b≥ )I-∩I*fN
YERuXh(4)α↓↓↓↓∧~BmAβ1PRα∧∧αα∧9xD-\:t≥α6≠Uzα∧∧ααα Yu$
C~IIt≤
I→trE
B∀J∃↔0hR∧∧αααλ9t$
αptxt
l+[hλλ∧∧λλ∪)zQ*∀
FP+∪ xp5∩)YJ∀∃ε(2**'1"Hλ∧∧λλ⊂ix⊃6pjpt
f≠7hλ∧∧λλλ YuQ2% ∀⊗+
K*.c!!"(λ∧∧λλ∪
0Wh∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧ ∪pp*I3sJλ9q⊃6h~
l7%↔c"H∧∧λλλλ9q⊃6h:↔pt¬677h∧∧λλλ∧ 3uQ%
∃0%J∃0e↔c"H∧∧λλλλ9q⊃6h:↔pt¬677h∧∧λλλ∧λ1⊃∩%
∃0eI133j+6s∪h85∩3ie∀∩0f∃*s∪Jx↔*V*:*.c!$λλλ∧∧⊂sqλ[pt↔h:
l7+tλλλ∧∧λ∪3jh*∀∃ε%∀∃∧H∃.c"D∧λλλ∧λsq⊃+_t↔pj¬l77d∧λλλ∧∧⊂1⊃ ∃∀∃∧H∃∪13)zV6s xp5∩)yJ∀∩(6J*s jq↔*'1"Hλ∧∧λλ⊂ix⊃6pjpt
f≠7hλ∧∧λλλ YuQ2% ∀⊗
K
.c!!"B"$∧λλλ∧ ∀⊗⊂Ktλλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λλλ∧∧λ∪∪h85∩3ie⊂sqλ[pt
f≠*.c!$λλλ∧∧⊃StD 7l(
:⊃4λε∀∃3U →λ⊗4j∀⊃∪c!!(⊂Q(y3C"A∀⊂sqλ[pt↔h:
l7+y3uQ)U∀∃(∃∀∃%↔c"B$λStH +l(∀jH4λ$
3U∩)D⊗∀t$λ∪c"A∀λλλλ(1r3AQB(λ∧∧∩1H ↔,(↓∧ O,(
I⊃3Hλ9q⊃6h:↔pt¬677h →⊃⊂J
:3+∀
F*#"A∀λλλλY∀q(λ(1r3Dλsq⊃+8t↔pj¬l77i→⊃⊂Jε¬∀∃%↔h⊂shH6ptxt
l+[p1⊃¬
u3+ε¬.h⊃)h∞c"A∀λλλ _H∩/&∀↓λ∩G[∀t(
I⊃3Hλ9q⊃6h:↔pt¬677s)zQ3*
+∀
F0J.aQB(λ∧∧⊃3Qπ1"B( _H∩&k~t(∃ λ3H⊂ix⊃6pjpt
f≠7p1λI*∀∃ε_+∪1)YtV6iIpp5 →sJ∀ _l**iIUq↔%↔c"B$λ3Q∞aQC"H∧∧λλλ _H⊃P(3lλ∃ λ3H⊂ix⊃6pjpt
f≠7h∩(d⊃P0gFλ∃∩λYH∩3*Y∩*∀jY+1H_j(⊃)Jq(∩(I5R*
:3+⊃H_j.c!$λλλ∧∧⊂sqλ[pt↔h:
l7+tλλλ∧∧λ∩1
λJ∀u)U∀∃E↔c"H∧∧λλλλ9q⊃6h:↔pt¬677h∧∧λλλ∧ 3uQ%
∃0%J∃0E↔c"H∧∧λλλλ9q⊃6h:↔pt¬677h∧∧λλλ∧
srQe ∀⊗ J⊗⊂J'1"Hλ∧∧λλ⊂ix⊃6pjpt
f≠7hλ∧∧λλλ
9rQb J⊗+∪
0J.aQHλλ∧∧λ⊂shH6ptxt
l+[hλλ∧∧λλ∀ z∩J f⊗k
'1"C"D∧λλλ∧
u⊂4JC⊂sqλT∀∃4i H l&u⊂0phZtj⊂ix⊃6l+U.h⊃)h∞c"AQHλλ∧∧λ⊃3HGc"H∧∧⊃3Qπ1"@INTERNAL PROCEDURE SATILE(REFERENCE INTEGER PIC1; INTEGER YL1,XL1, TY,TX,YSQ,XSQ;
REFERENCE INTEGER PIC2; INTEGER YL2,XL2);
BEGIN
INTEGER PT1CI,PT2AI,FAC;
comment
or in a TY*YSQ by TX*XSQ window from PIC1 with upleft corner YL1,XL1 into
a TY by TX window in PIC2 with upleft at YL2,XL2 each destination pixel
is appropriately scaled sum of YSQ*XSQ source pixels;
IF XL1<0 THEN BEGIN TX←TX+XL1%XSQ; XL2←XL2-XL1%XSQ; XL1←0; END;
IF YL1<0 THEN BEGIN TY←TY+YL1%YSQ; YL2←YL2-YL1%YSQ; YL1←0; END;
IF XL2<0 THEN BEGIN TX←TX+XL2; XL1←XL1-XL2*XSQ; XL2←0; END;
IF YL2<0 THEN BEGIN TY←TY+YL2; YL1←YL1-YL2*YSQ; YL2←0; END;
TX←(MEMORY[LOCATION(PIC1)+LNBY]-XL1)%XSQ MIN TX; comment bounds test;
TX←(MEMORY[LOCATION(PIC2)+LNBY]-XL2) MIN TX;
TY←(MEMORY[LOCATION(PIC1)+PCLN]-YL1)%YSQ MIN TY;
TY←(MEMORY[LOCATION(PIC2)+PCLN]-YL2) MIN TY;
IF MEMORY[LOCATION(PIC2)+LNBY]≤0 ∨ MEMORY[LOCATION(PIC2)+PCLN]≤0 ∨
TX<1 ∨ TY<1 ∨ XSQ<1 ∨ YSQ<1 THEN RETURN;
PT1CI←MEMORY[MEMORY[LOCATION(PIC1)+BPTAB]+XL1-1]
+MEMORY[LOCATION(PIC1)+LINTAB+YL1]; comment source byte pointer;
PT2AI←MEMORY[MEMORY[LOCATION(PIC2)+BPTAB]+XL2-1]
+MEMORY[LOCATION(PIC2)+LINTAB+YL2]; comment destination byte pointer;
FAC←
IF MEMORY[LOCATION(PIC2)+BMAX]<MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ THEN
(MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ) % MEMORY[LOCATION(PIC2)+BMAX] ELSE
- MEMORY[LOCATION(PIC2)+BMAX] % (MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ) ;
IF FAC>0 ∧ (MEMORY[LOCATION(PIC1)+BMAX]*XSQ*YSQ)%FAC >
MEMORY[LOCATION(PIC2)+BMAX] THEN FAC←FAC+1;
IF ABS(FAC)=1 THEN FAC←0;
comment do samples have to be multiplied or divided to scale properly?;
BEGIN "write inner loop"
DEFINE SUM=1, OVR=2, PT1=3, PT1A=4, PT1C=5, LPX=6, LPY=7,
PT2='10, PT2A='11, PT1B='13;
INTEGER LPYB,LPXB,I,J,CP;
INTEGER ARRAY CODE[1:(XSQ*2+2)*YSQ+16];
CP←0;
CODE[CP←CP+1]← MOVE(PT1C,LOCATION(PT1CI));
CODE[CP←CP+1]← MOVE(PT2A,LOCATION(PT2AI));
CODE[CP←CP+1]← MOVEI(LPY,TY);
LPYB← LOCATION(CODE[CP+1]);
CODE[CP←CP+1]← MOVE(PT1A,PT1C);
CODE[CP←CP+1]← ADDI(PT1C,MEMORY[LOCATION(PIC1)+LNWD]*YSQ);
CODE[CP←CP+1]← MOVE(PT2,PT2A);
CODE[CP←CP+1]← ADDI(PT2A,MEMORY[LOCATION(PIC2)+LNWD]);
CODE[CP←CP+1]← MOVEI(LPX,TX);
LPXB← LOCATION(CODE[CP+1]);
FOR I←1 STEP 1 UNTIL YSQ DO
BEGIN
CODE[CP←CP+1]←MOVEM(PT1A,PT1);
FOR J←1 STEP 1 UNTIL XSQ DO
BEGIN
IF I=1 ∧ J=1 THEN CODE[CP←CP+1]← ILDB(SUM,PT1)
ELSE BEGIN CODE[CP←CP+1]←ILDB(0,PT1); CODE[CP←CP+1]←ADD(SUM,0); END;
IF I=1 ∧ J=XSQ THEN CODE[CP←CP+1]←MOVEM(PT1,PT1B);
END;
IF I≠YSQ THEN CODE[CP←CP+1]←ADDI(PT1A,MEMORY[LOCATION(PIC1)+LNWD]);
END;
IF FAC≠0 THEN CODE[CP←CP+1]← IF FAC<0 THEN IMULI(SUM,-FAC) ELSE IDIVI(SUM,FAC);
CODE[CP←CP+1]← IBP(0,PT2);
CODE[CP←CP+1]← CAIE(SUM,0);
CODE[CP←CP+1]← DPB(SUM,PT2);
CODE[CP←CP+1]← MOVE(PT1A,PT1B);
CODE[CP←CP+1]← SOJG(LPX,LPXB);
CODE[CP←CP+1]← SOJG(LPY,LPYB);
CODE[CP←CP+1]← POPJ('17,0);
START_CODE PUSHJ '17,ACCESS(CODE[1]); END;
END;
END;
END "SQTILE";